package com.jmb.api.service.impl;

import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jmb.api.model.entity.ApiTestCaseExecuteLog;
import com.jmb.api.model.to.api.log.ApiTestCaseExecuteLogListTO;
import com.jmb.api.model.vo.api.log.ApiTestCaseExecuteLogListVO;
import com.jmb.api.model.vo.api.log.ApiTestCaseExecuteLogVO;
import com.jmb.api.service.ApiTestCaseExecuteLogService;
import com.jmb.api.mapper.ApiTestCaseExecuteLogMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author jinbo
* @description 针对表【api_test_case_execute_log】的数据库操作Service实现
* @createDate 2025-04-08 13:53:56
*/
@Service
public class ApiTestCaseExecuteLogServiceImpl extends ServiceImpl<ApiTestCaseExecuteLogMapper, ApiTestCaseExecuteLog>
    implements ApiTestCaseExecuteLogService{
    @Autowired
    private ApiTestCaseExecuteLogMapper executeLogMapper;

    /**
     * 保存执行日志
     * @param caseExecuteLog 日志对象
     * @return 保存后的日志对象
     */
    @Override
    public ApiTestCaseExecuteLog saveApiTestCaseExecuteLog(ApiTestCaseExecuteLog caseExecuteLog) {
        this.save(caseExecuteLog);
        return caseExecuteLog;
    }

    @Override
    public IPage<ApiTestCaseExecuteLogListVO> getExecuteLogList(IPage<ApiTestCaseExecuteLogListVO> page, ApiTestCaseExecuteLogListTO caseExecuteLogListTO) {
        return executeLogMapper.selectExecuteListPage(page,caseExecuteLogListTO);
    }

    /**
     * 根据执行ID查询执行日志
     * @param executeId 执行编号
     * @return 返回执行日志
     */
    @Override
    public ApiTestCaseExecuteLogVO findExecute(Integer executeId) {

        return executeLogMapper.selectExecute(executeId);
    }

    /**
     * 改执行日志，主要用来根据断言执行状态来再次修改执行状态
     * @param executeLog 执行日志
     */
    @Override
    public void modifyExecuteLog(ApiTestCaseExecuteLog executeLog) {
        executeLogMapper.updateExecuteLog(executeLog);

    }

    /**
     * 获取用例执行调用链
     * @param executeId 执行编号
     * @return 返回执行日志
     */
    @Override
    public JSONArray caseExecuteLogChain(Integer executeId) {
        // 查询信息
        ApiTestCaseExecuteLogVO executeLogVO = this.findExecute(executeId);
        String chain = executeLogVO.getChain();
        return JSONArray.parseArray(chain);
    }

    /**
     * 查询执行日志列表，不分页的数据
     * @param executeLogListDTO 执行日志
     * @return 返回不分页的数据
     */
    @Override
    public List<ApiTestCaseExecuteLogListVO> findExecuteListAll(ApiTestCaseExecuteLogListTO executeLogListDTO) {

        return executeLogMapper.selectExecuteList(executeLogListDTO);
    }
}




